﻿using System;
using System.Collections.Generic;
using XNAFight.Engine;

namespace XNAFight.Characters.Core
{
    // Stock des mouvements de base sur un certain nombre de frames
    // Lorsqu'il est plein l'element le plus ancien est supprimé
    // Doit être mis à jour à chaque frame
    public class BasicMovesBuffer
    {
        #region CHAMPS

        private List<List<BMove>> last_basic_moves;   // int pour les tags des mouvements (XNAFight.Engine.Moves), 
                                                    // une liste pour les mouvements d'une frame, 

        private int max_size;   // Taille maximum du buffer
        
        // une liste pour toutes les frames
        #endregion

        #region INITIALISATION

        public BasicMovesBuffer(int _max_size)
        {
            last_basic_moves = new List<List<BMove>>();
            last_basic_moves.Add(new List<BMove>()); // Pour ne pas à avoir à tester si la liste est vide puisqu'elle se remplit d'elements vides au pire
            max_size = _max_size;
        }

        #endregion

        #region PROPRIETES

        public List<List<BMove>> LastBMoves
        {
            get { return last_basic_moves; }
        }
        public int MaxSize
        {
            get { return max_size; }
        }

        #endregion

        #region UPDATE

        public void Update(List<BMove> _current_basic_moves)
        {
            // Les mouvements les plus recents sont placés au début
            last_basic_moves.Insert(0,_current_basic_moves);
            
            // Si la taille maximum du buffer est dépassée alors les mouvements les plus anciens sont effacés
            if (last_basic_moves.Count > max_size)
            {
                last_basic_moves.RemoveAt(max_size);
            }
        }

        #endregion

        
        public bool isEmpty()
        {
            return last_basic_moves.Capacity == 0;
        }
    }
}
